1 /** 2 * This file is a base for communication between client-server. 3 * Since that happens, structures inside that file should be shared by being implemented on the server, and the client 4 * will be able to interpret the data correctly. 5 */ 6 module hip.api.net.server; 7 public import hip.api.net.hipnet; 8 9 10 struct ConnectedClient 11 { 12 NetConnectInfo connInfo; 13 } 14 15 /** 16 * Whenever the client makes a request for the server on the connected clients, that is the structure that should be returned. 17 */ 18 pragma(LDC_no_typeinfo) 19 struct ConnectedClientsResponse 20 { 21 ConnectedClient[] clients; 22 } 23 24 enum AcceptResponse 25 { 26 ///Used when the usage is not valid. Currently, when on a request 27 request, 28 no, 29 yes 30 } 31 32 /** 33 * This is a common struct to return whenever someone is asking to connect 34 */ 35 align(1) 36 struct ConnectToClientResponse 37 { 38 uint connectionRequester; 39 ///When it is a request, this response is invalid. It then should return a yes/no response 40 AcceptResponse response; 41 } 42 43 ubyte[] getNetworkFormattedData(MarkedNetReservedTypes code) 44 { 45 import hip.api.net.utils; 46 NetHeader header = NetHeader(MarkedNetReservedTypes.sizeof, NetDataType.binary); 47 return toNetworkBytes(toBytes(header, code)); 48 } 49 50 51 ubyte[] getNetworkFormattedData(T)(T data, MarkedNetReservedTypes code) 52 { 53 import hip.api.net.utils; 54 import std.traits:isDynamicArray; 55 56 uint size = getSendTypeSize(data) + cast(uint)ubyte.sizeof; 57 58 static if(is(T == string)) 59 { 60 NetHeader header = NetHeader(size, NetDataType.text); 61 } 62 else 63 { 64 static if(isDynamicArray!T) 65 { 66 NetHeader header = NetHeader(size, NetDataType.binary); 67 } 68 else 69 { 70 NetHeader header = NetHeader(size, NetDataType.binary); 71 } 72 } 73 74 75 return toNetworkBytes(toBytes(header, data, code)); 76 }